package math

import "math"

func Softmax(values []float64) []float64 {
	if len(values) == 0 {
		return values
	}

	ret := make([]float64, len(values))

	// 计算总和 1.5^(score)
	var sumExp float64
	for _, value := range values {
		sumExp += math.Pow(1.5, value)
	}

	// 计算每个玩家的 softmax 概率
	for i, value := range values {
		ret[i] = math.Pow(1.5, value) / sumExp
	}

	return ret
}

func SoftmaxSum(values []float64) float64 {
	if len(values) == 0 {
		return 0
	}

	// 计算总和 1.5^(score)
	var sumExp float64

	for _, value := range values {
		sumExp += math.Pow(1.5, value)
	}

	return sumExp
}

func SoftmaxValue(value float64, sumExp float64) float64 {
	if sumExp <= 0 {
		return 0
	}

	return math.Pow(1.5, value) / sumExp
}
